package cn.com.baiwei.service.impl;

import cn.com.baiwei.mapper.FoodStuffMapper;
import cn.com.baiwei.pojo.FoodStuff;
import cn.com.baiwei.util.ZZUtil;

import org.springframework.stereotype.Service;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;

import java.util.Map;


/**
 * (FoodStuff)表服务实现类
 *
 * @author X_Q
 * @version 1.0
 * @since 2021-09-13 17:29:30
 */
@Service("foodStuffService")
public class FoodStuffServiceImpl {
    @Resource
    private FoodStuffMapper foodStuffMapper;

    /**
     * 根据模糊条件查询总个数
     *
     * @param foodName 查询条件
     * @return 返回查询到的总个数
     */
    public Map<String, Object> selectForCount(String foodName) {
        Map<String, Object> map = new HashMap<>();
        // 前端端分离时，前端人员会首先判断code值是否满足200，如果不是200，则提醒用户失败
        map.put("code", 200);
        map.put("msg", "查询成功");
        map.put("data", this.foodStuffMapper.selectForCount(foodName));
        return map;
    }

    /**
     * 查询所有数据
     *
     * @return 返回所有数据
     */
    public Map<String, Object> selectAll(String foodName) {
        Map<String, Object> map = new HashMap<>();
        // 前端端分离时，前端人员会首先判断code值是否满足200，如果不是200，则提醒用户失败
        map.put("code", 200);
        map.put("msg", "查询成功");
        map.put("data", this.foodStuffMapper.selectAll(foodName));
        return map;
    }

    /**
     * 查询 状态1 所有数据
     *
     * @return 返回所有数据
     */
    public Map<String, Object> selectAllByState() {
        Map<String, Object> map = new HashMap<>();
        // 前端端分离时，前端人员会首先判断code值是否满足200，如果不是200，则提醒用户失败
        map.put("code", 200);
        map.put("msg", "查询成功");
        map.put("data", this.foodStuffMapper.selectAllByState());
        return map;
    }

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    public Map<String, Object> selectById(Integer id) {
        Map<String, Object> map = new HashMap<>();
        // 前端端分离时，前端人员会首先判断code值是否满足200，如果不是200，则提醒用户失败
        map.put("code", 200);
        map.put("msg", "查询成功");
        map.put("data", this.foodStuffMapper.selectById(id));
        return map;
    }

/**
 * 查询分页数据
 *
 * @param index 查询起始位置
 * @param foodName  查询条件
 * @return 对象列表
 *//*
    public Map<String, Object> selectForPage(int index, String foodName) {
    // 获取当前表中的总记录
        int tableCount = this.foodStuffMapper.selectForCount(foodName);
        // 总页码计算   (总条数 - 1) / 每页显示条数  + 1
        // (100 - 1) / 10 + 1 = 10        (101 - 1) / 10 + 1 = 11      (99 - 1) / 10 + 1 = 10
        int pageCount = ((tableCount - 1) / 10) + 1;
        // 计算每页开始的下标值
        index = ((index - 1) * 10);
        Map<String, Object> map = new HashMap<>();
        map.put("code", 200);   // 前端端分离时，前端人员会首先判断code值是否满足200，如果不是200，则提醒用户失败
        map.put("msg", "查询成功");
        map.put("pageCount", pageCount);  // 查询的记录总页码
        map.put("count", tableCount);     // 当前表中的总条数
        map.put("data", this.foodStuffMapper.selectForPage(index, foodName));
        return map;
    }*/

    /**
     * 新增数据
     *
     * @param foodStuff 实例对象
     * @return 实例对象
     */
    public Map<String, Object> insert(FoodStuff foodStuff) throws IOException {
        Map<String, Object> map = new HashMap<>();
        if (Integer.parseInt(foodStuff.getPotMoney()) <= 0) {
            map.put("code", 500);
            map.put("msg", "输入错误,单价应为正整数");
            return map;
        }
        if (foodStuff.getPotInventory() <= 0) {
            map.put("code", 500);
            map.put("msg", "输入错误,库存应为正整数");
            return map;
        }

        this.foodStuffMapper.insert(foodStuff);
        map.put("code", 200);
        map.put("msg", "菜品新增成功");
        return map;
    }

    /**
     * 通过ID查询单条数据
     *
     * @param foodStuff 实例对象
     * @return 实例对象
     */
    public Map<String, Object> updateById(FoodStuff foodStuff) {
        this.foodStuffMapper.updateById(foodStuff);
        Map<String, Object> map = new HashMap<>();
        map.put("code", 200);   // 前端端分离时，前端人员会首先判断code值是否满足200，如果不是200，则提醒用户失败
        map.put("msg", "菜品更新成功");
        return map;
    }

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    public Map<String, Object> deleteById(String id) {
        this.foodStuffMapper.deleteById(id);
        Map<String, Object> map = new HashMap<>();
        map.put("code", 200);   // 前端端分离时，前端人员会首先判断code值是否满足200，如果不是200，则提醒用户失败
        map.put("msg", "菜品删除成功");
        return map;
    }

    /**
     * 上传菜品图片
     *
     * @param file    文件名
     * @param request 转发
     * @return
     */
    public Map<String, Object> uploadPicture(Integer id, MultipartFile file, HttpServletRequest request) throws IOException {
        Map<String, Object> map = new HashMap<>();
        if (null == id) {
            map.put("code", 500);
            map.put("msg", "请重新选择！");
        }
        String timeMillis = "" + System.currentTimeMillis();
        String dirStr = "uploadPicture";
        // request.getServletContext().getRealPath("") 根据相对路径获取服务器上资源的绝对路径
        String filePath = request.getServletContext().getRealPath("") + dirStr + File.separator + timeMillis + file.getOriginalFilename();//上传到的路径及文件名称
        File newFile = new File(filePath);
        FileCopyUtils.copy(file.getBytes(), newFile);
        String foodStuffPicture = File.separator + dirStr + File.separator + timeMillis + file.getOriginalFilename(); //存入数据库:/foodPicture/文件名
        System.out.println(foodStuffPicture);
        foodStuffMapper.uploadPicture(foodStuffPicture, id);
        map.put("code", 200);
        map.put("msg", "修改菜品图片成功");
        return map;
    }

    /**
     * 通过ID查询单条数据
     *
     * @param state 状态
     * @param id    id
     * @return 实例对象
     */
    public Map<String, Object> uploadState(Integer state, Integer id) {
        this.foodStuffMapper.uploadState(state, id);
        Map<String, Object> map = new HashMap<>();
        map.put("code", 200);
        map.put("msg", "状态修改成功");
        return map;
    }


/*    public Map<String, Object> updateCutByIds(List<OrderFormParticulars> ofpList) {
        this.foodStuffMapper.updateCutByIds(ofpList);
        Map<String, Object> map = new HashMap<>();
        map.put("code", 200);
        map.put("msg", "状态修改成功");
        return map;
    }*/

}